/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package documentadorrepositorio.apresentacao;

import documentadorrepositorio.artefatos.Artefato;
import documentadorrepositorio.descritoresArtefatos.DescritorArtefato;
import documentadorrepositorio.interfaceGrafica.OrdemArtefatos;
import documentadorrepositorio.interfaceGrafica.PrincipalIG;
import java.awt.Dialog;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Vector;
import javax.swing.DefaultListModel;
import javax.swing.DefaultListSelectionModel;
import javax.swing.JFrame;
import javax.swing.table.DefaultTableColumnModel;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author romulo
 */
public class SelecionarOrdemArtefatos
{

    public DefaultListModel model = new DefaultListModel();
    public ArrayList<Artefato> lista = new ArrayList<>();
    public OrdemArtefatos frame;
    public ArrayList<String> variaveisCapa = new ArrayList<>();

    public SelecionarOrdemArtefatos(JFrame frame, Map<DescritorArtefato, List<Artefato>> artefatos)
    {
        for (Map.Entry<DescritorArtefato, List<Artefato>> entry : artefatos.entrySet())
        {
            if (entry.getValue().size() > 0)
            {
                this.lista.add(entry.getValue().get(0));
            }
        }
        this.frame = new OrdemArtefatos(frame, true);
        carregaDados();
        adicionarEventos();

        this.frame.getTxtAjuda().setText("Nesse espaço é possível você selecionar a ordem em que deseja que os elementos sejam "
                + "exibidos no na documentação gerada. Também é possível remover artefatos que você não quer que apareça na "
                + "documetação");
        this.frame.getTxtAjudaCapa().setText("Nesse espaço é possível você informar alguns dados para gerar a capa do seu projeto"
                + ", dados como o nome da instituição, nome do autor do projeto, título do trabalho, local e ano. Você pode informar"
                + " todos os dados ou apenas o que deseja. A capa será gerada como o modelo ao lado. ");

    }

    public void setVisibleTela(JFrame frame)
    {
        this.frame.setModalityType(Dialog.ModalityType.APPLICATION_MODAL);
        this.frame.setLocationRelativeTo(frame);
        this.frame.setVisible(true);
    }

    private void carregaDados()
    {

        model = new DefaultListModel();

        this.frame.getListArtefatos().setModel(model);

        for (Artefato a : this.lista)
        {
            model.addElement(a.getTipo());
        }
    }

    private void adicionarEventos()
    {
        this.frame.getBtnDescer().addActionListener(new ActionListener()
        {

            @Override
            public void actionPerformed(ActionEvent e)
            {
                evento_Descer();
            }
        });

        this.frame.getBtnFechar().addActionListener(new ActionListener()
        {

            @Override
            public void actionPerformed(ActionEvent e)
            {
                evento_fechar();
            }
        });
        this.frame.getBtnSubir().addActionListener(new ActionListener()
        {

            @Override
            public void actionPerformed(ActionEvent e)
            {
                evento_Subir();
            }
        });

        this.frame.getBtnRemover().addActionListener(new ActionListener()
        {

            @Override
            public void actionPerformed(ActionEvent e)
            {
                evento_Remover();
            }
        });
    }

    private void evento_Descer()
    {
        if (this.frame.getListArtefatos().getSelectedIndex() != -1)
        {

            if (this.frame.getListArtefatos().getSelectedIndex() != this.frame.getListArtefatos().getModel().getSize() - 1)
            {
                int i = this.frame.getListArtefatos().getSelectedIndex() + 1;
                this.lista.add(this.frame.getListArtefatos().getSelectedIndex() + 1, (this.lista.remove(this.frame.getListArtefatos().getSelectedIndex())));
                this.frame.getListArtefatos().removeAll();
                carregaDados();
                this.frame.getListArtefatos().setSelectedIndex(i);
            }

        }
    }

    private void evento_Subir()
    {
        if (this.frame.getListArtefatos().getSelectedIndex() != -1)
        {

            if (this.frame.getListArtefatos().getSelectedIndex() != 0)
            {
                int i = this.frame.getListArtefatos().getSelectedIndex() - 1;
                this.lista.add(this.frame.getListArtefatos().getSelectedIndex() - 1, (this.lista.remove(this.frame.getListArtefatos().getSelectedIndex())));
                this.frame.getListArtefatos().removeAll();
                carregaDados();
                this.frame.getListArtefatos().setSelectedIndex(i);
            }

        }
    }

    private void evento_Remover()
    {
        this.lista.remove(this.frame.getListArtefatos().getSelectedIndex());
        this.frame.getListArtefatos().removeAll();
        carregaDados();
    }

    private void evento_fechar()
    {
        
        this.variaveisCapa.add(this.frame.getTxtNomeInstituicao().getText());
        this.variaveisCapa.add(this.frame.getTxtNomeAutor().getText());
        this.variaveisCapa.add(this.frame.getTxtTitulo().getText());
        this.variaveisCapa.add(this.frame.getTxtLocal().getText());
        this.variaveisCapa.add(this.frame.getTxtAno().getText());
        
        this.frame.dispose();
    }
}
